/**
 * Cookie 持久化测试 - 网络请求监控版本
 * 通过监控网络请求中的 Cookie 头来验证是否复用
 */

const puppeteer = require('puppeteer');

async function testCookiePersistence() {
  console.log('🧪 开始测试 Cookie 持久化（网络请求监控）...\n');

  const browser = await puppeteer.launch({
    headless: true,
    args: ['--no-sandbox']
  });

  const page = await browser.newPage();

  // 存储请求的 Cookie 值
  const requestCookies = [];

  // 监听所有请求
  page.on('request', (request) => {
    const url = request.url();

    // 只关注 Douyin 相关的请求
    if (url.includes('/dylive/') || url.includes('douyin.com')) {
      const headers = request.headers();
      const cookie = headers['cookie'] || headers['Cookie'];

      if (cookie) {
        // 提取关键 Cookie（如 __ac_nonce）
        const acNonceMatch = cookie.match(/__ac_nonce=([^;]+)/);
        const ttwidMatch = cookie.match(/ttwid=([^;]+)/);

        requestCookies.push({
          url: url.substring(0, 80),
          timestamp: new Date().toISOString(),
          __ac_nonce: acNonceMatch ? acNonceMatch[1].substring(0, 20) + '...' : '无',
          ttwid: ttwidMatch ? ttwidMatch[1].substring(0, 20) + '...' : '无',
          cookieLength: cookie.length
        });
      }
    }
  });

  // 访问页面
  await page.goto('http://localhost:3001', {
    waitUntil: 'networkidle0',
    timeout: 30000
  });

  console.log('✅ 页面加载完成\n');

  // 测试1: 第一次调用 getLiveInfo
  console.log('📍 测试1: 第一次调用 getLiveInfo');
  try {
    await page.evaluate(async () => {
      if (typeof window.getLiveInfo === 'function') {
        try {
          // 使用一个真实的房间ID或主播ID进行测试
          await window.getLiveInfo('7412345678901234567');
        } catch (err) {
          console.log('getLiveInfo 调用失败（可能房间不存在）');
        }
      }
    });
  } catch (err) {
    console.log('调用失败:', err.message);
  }

  await new Promise(resolve => setTimeout(resolve, 2000));

  // 测试2: 第二次调用 getLiveInfo
  console.log('📍 测试2: 第二次调用 getLiveInfo（2秒后）');
  try {
    await page.evaluate(async () => {
      if (typeof window.getLiveInfo === 'function') {
        try {
          await window.getLiveInfo('7412345678901234568');
        } catch (err) {
          console.log('getLiveInfo 调用失败');
        }
      }
    });
  } catch (err) {
    console.log('调用失败:', err.message);
  }

  await new Promise(resolve => setTimeout(resolve, 1000));

  // 测试3: 第三次调用 getLiveInfo
  console.log('📍 测试3: 第三次调用 getLiveInfo（再次调用）');
  try {
    await page.evaluate(async () => {
      if (typeof window.getLiveInfo === 'function') {
        try {
          await window.getLiveInfo('7412345678901234569');
        } catch (err) {
          console.log('getLiveInfo 调用失败');
        }
      }
    });
  } catch (err) {
    console.log('调用失败:', err.message);
  }

  await new Promise(resolve => setTimeout(resolve, 1000));

  // 分析结果
  console.log('\n📊 网络请求 Cookie 分析:\n');

  if (requestCookies.length === 0) {
    console.log('⚠️  未捕获到任何包含 Cookie 的请求');
    console.log('💡 这可能是因为:');
    console.log('   1. 请求失败或被拦截');
    console.log('   2. Douyin 没有返回 Set-Cookie');
    console.log('   3. 测试的房间ID不存在\n');
  } else {
    console.log(`✅ 捕获到 ${requestCookies.length} 个包含 Cookie 的请求:\n`);

    requestCookies.forEach((req, index) => {
      console.log(`请求 ${index + 1}:`);
      console.log(`  URL: ${req.url}`);
      console.log(`  时间: ${req.timestamp}`);
      console.log(`  __ac_nonce: ${req.__ac_nonce}`);
      console.log(`  ttwid: ${req.ttwid}`);
      console.log(`  Cookie总长度: ${req.cookieLength} 字符`);
      console.log('');
    });

    // 检查 Cookie 一致性
    console.log('🔑 Cookie 一致性检查:');

    const acNonces = requestCookies.map(r => r.__ac_nonce).filter(v => v !== '无');
    const ttwids = requestCookies.map(r => r.ttwid).filter(v => v !== '无');

    if (acNonces.length > 1) {
      const allSame = acNonces.every(val => val === acNonces[0]);
      if (allSame) {
        console.log(`✅ __ac_nonce 在所有请求中一致: ${acNonces[0]}`);
      } else {
        console.log('❌ __ac_nonce 在不同请求中不一致:');
        acNonces.forEach((val, i) => console.log(`   请求${i + 1}: ${val}`));
      }
    }

    if (ttwids.length > 1) {
      const allSame = ttwids.every(val => val === ttwids[0]);
      if (allSame) {
        console.log(`✅ ttwid 在所有请求中一致: ${ttwids[0]}`);
      } else {
        console.log('❌ ttwid 在不同请求中不一致:');
        ttwids.forEach((val, i) => console.log(`   请求${i + 1}: ${val}`));
      }
    }

    if (acNonces.length > 1 || ttwids.length > 1) {
      console.log('\n🎉 结论: Puppeteer 在多次请求中复用了相同的 Cookie！');
    }
  }

  await browser.close();
  console.log('\n🧪 测试完成');
}

// 运行测试
testCookiePersistence().catch(console.error);
